/**
 * 注意：拦截uni.switchTab本身没有问题。但是在微信小程序端点击tabbar的底层逻辑并不是触发uni.switchTab。所以误认为拦截无效，此类场景的解决方案是在tabbar页面的页面生命周期onShow中处理。
 */
//拦截器 拦截只要是未登录状态，想要跳转到名单内的路径时，直接跳到登录页。

import { useUserStore } from '@/stores'
const isLogined = () => {
    const userStore = useUserStore()
    return userStore.isLogin || false
}

// 页面名单 不需要登录的页面
const checkList = ['/pages/login/login']

// 防重复跳转标记
let isRedirectingToLogin = false

const navigateToInterceptor = {
    invoke({ url }: { url: string }) {
        // 获取不带参数的路径
        if (url.indexOf('?') !== -1) {
            url = url.substring(0, url.indexOf('?'))
        }
        // 判断是否在白名单中
        if (checkList.indexOf(url) !== -1) {
            // 已经在白名单中，直接跳转
            return true
        }
        //是否登录
        const isLogin = isLogined()
        if (isLogin) {
            // 已登录，直接跳转
            return true
        } else {
            //未登录 已经在跳转中，不需要再次拦截
            if (isRedirectingToLogin) return false
        }

        // 设置跳转标记，防止重复执行
        isRedirectingToLogin = true
        uni.reLaunch({
            url: '/pages/login/login',
            success: () => {
                // 跳转成功后重置
                // 标记
                setTimeout(() => {
                    isRedirectingToLogin = false
                }, 1000)
            },
            fail: () => {
                // 跳转失败后重置标记
                isRedirectingToLogin = false
            },
        })
        return false
    },
}
uni.addInterceptor('navigateTo', navigateToInterceptor)
uni.addInterceptor('reLaunch', navigateToInterceptor)
uni.addInterceptor('redirectTo', navigateToInterceptor)
uni.addInterceptor('switchTab', navigateToInterceptor)
